HOME/Articles/

Python 版本和虚拟环境管理思路

Article Outline

关于 python 的环境管理,Kenneth Reitz 大神在 Guide to Python 中有非常详尽的阐述。在这篇文章中,他极力推荐了他的项目 pipenv 作为 python 的虚拟环境管理首选工具。

<!--more-->

Pipenv

确保 python 安装了 pip,使用 pip install --user pipenv 安装,使用 --user 安装是避免发生一些错误。安装后将 pipenv 添加到环境变量,详情关注 pipenv 安装。安装后可以 pipenv --help 来查看详细的操作了。

pipenv 这个工具非常好用,但是在实际使用过程中还是会遇到一些问题。

pipenv 的管理目录不可以灵活定制

Virtualenv

虽然 pipenv 是基于 virtualenv 的,但是时至目前,pipenv 并不能向 virtualenv 一样在任意目录随意创建 env 环境,只能指定一个固定的目录用于环境存放,该项目的维护者表示现在还没有计划开放这样的功能,可能他们觉得将所有的环境存放在一个固定的位置更好。但是有时候我们习惯就将虚拟环境放到项目目录下,这样在编辑器中查看包源码以及相关文件的时候更加方便,在目录下 virtualenv <venv_name>。

如果对包管理目录的灵活性有特殊要求,优先选用 virtualenv;其他情况放心使用 pipenv。

Autoenv

在使用虚拟环境管理的时候激活(activate)和返回(deactivate)步骤是比较繁琐的,就算是比较人性的 pipenv 也要不停的 pipenv run 或者 pipenv shell,我们可以使用 Reitz 的另外一个神器 autoenv. 这个工具通过在目录下生成 .env 文件,自动执行 activate 操作。只需要在创建完虚拟环境后添加 echo source <虚拟环境的 activate 脚本目录> >> .env就可以了。

Pyenv

在多个版本的 python 管理中,这一套环境管理方案也不需要做多少改变。只需要在安装 pyenv,切换好版本以后注意通过 git 或者其他全局方式安装 autoenv, 如果通过 pip 方式安装,在多版本的 python 中,autoenv 的启动程序会放在特定的版本中,切换另一个版本的 python 以后,autoenv 就失效了。pipenv 同样可以通过 pipenv --two 等命令来选择 python 版本来安装制定版本的虚拟环境。

pyenv 安装 python 依赖一些库,如果不安装这些库安装 python 版本的时候会报错,具体有这些库:

sudo apt-get install libbz2-dev libssl-dev libreadline-dev libsqlite3-dev